package ChainArriere;

import java.util.Vector;
/* Classe definissant la question posee */

class Question
{

	private Vector faits;		// Liste des faits de la question
	private boolean et;			// Vrai si on travaille sur une conjontion

	// Le constructeur
	public Question(String texte) {

		String[] laQuestion = texte.split(" ");
		faits = new Vector();

		if (laQuestion.length == 1) {			// Un seul fait a demontrer
			et = false;
			faits.add(Fait.creer(laQuestion[0]));
		} else {								// Plusieurs faits a demontrer
			et = laQuestion[1].equals("ET");	// Conjonction / Disjonction

			// On ajoute tous les elements de la question
			for (int i = 0; i < laQuestion.length; i++)
				faits.add(Fait.creer(laQuestion[i++]));
		}
	}

	// Petite methode d'acces
	public Vector getFaits() {
		return faits;
	}

	// On verifie si on a une reponse (Et on la retourne si c'est le cas)
	public Boolean resultat() {

		boolean unTrue = false;	// Note si on a rencontre un fait True
		boolean unFalse = false;// Note si on a rencontre un fait False
		boolean unInd = false;	// Note si on a rencontre un fait Indetermine

		
		// On visite tous les faits de la question
		for (int i = 0, max = faits.size(); i < max; i++)
		{
			
			if (!((Fait) faits.get(i)).ok()) 
			{	// Indetermine
				unInd = true;
			} 
			else // Determine
			{				
				
				if (((Fait) faits.get(i)).get())
				{
					unTrue = true;				// Un True !
				}
				else
				{
					unFalse = true;				// Un False !
				}
			}
		}


		// On a une conjonction et au moins un False
		if (et && unFalse) return new Boolean(false);

		// On a une disjonction et au moins un True
		if (!et && unTrue) return new Boolean(true);

		// On a une conjonction et aucune indetermination
		if (et && !unFalse && !unInd) return new Boolean(true);

		// On a une disjonction et aucune indetermination
		if (!et && !unTrue && !unInd) return new Boolean(false);

		// Sinon on ne peut pas encore conclure
		return null;
	}
}